# 类定义的语法
"""
class  : 定义类的关键字
class Person:  # Person  是类名字，首字母要大写
    pass
"""
class Person:  # 定义人类
    money = 100 # 类属性
    def __init__(self,name,age,sex,phone,address,email): # 实例属性/对象属性：你在创建对象的时候，需要赋值的属性
        """
        __xxx__: 双下划线的，都是魔术方法
        __init__：初始化方法，所有根据这个类创建出来的对象，都会走到这里
        :param name: 名字
        :param age: 年龄
        :param sex: 性别
        :param phone: 手机号
        :param address: 地址
        :param email: 邮箱
        """
        self.name = name
        self.age = age
        self.sex = sex
        self.phone = phone
        self.address = address
        self.email = email
        """
        self：表示对象可以使用的实例属性，self也表示对象
              只有加了self，整篇类才可以找到它并且使用
        """
    # 函数/方法/技能
    def course(self):  # 类函数
        # self到底是什么？
        print(self)
        print('course')
        return "张鑫"

if __name__ == '__main__':  # 整篇py文件的执行入口
    # 通过Person类，创建对象：p1
    p1 = Person("张鑫",95,"女","15987662231","辽宁沈阳","2655442827@qq.com")
    # 通过对象调用类方法
    # p1.course()
    #  查看对象本身的实例属性
    # print(p1.__dict__) # {'name': '张鑫', 'age': 95, 'sex': '女', 'phone': '15987662231', 'address': '辽宁沈阳', 'email': '2655442827@qq.com'}
    # 可以单独给对象加属性
    p1.play = "打游戏"
    # print(p1.__dict__)

    # 创建p2对象
    # 不同的对象之间，实例属性是相互隔离
    p2 = Person("张三",19,"男","19882797","湖北武汉","29800@163.com")
    # print(p2.__dict__)

    # 可以修改对象属性
    p1.name = "李四"
    # print(p1.name)
    # print(p1.__dict__)

    # 可以删除对象属性
    del p1.name
    # print(p1.__dict__)

    # 使用类属性
    # print(p1.money)  # 通过实例化的对象调用类属性
    # print(Person.money) # 通过类直接调用类属性

    # 修改类属性
    #p1.money = 200 # 给对象本身加了一个对象属性
    #print(Person.money) # 100
    #print(p1.__dict__) # {'age': 95, 'sex': '女', 'phone': '15987662231', 'address': '辽宁沈阳', 'email': '2655442827@qq.com', 'play': '打游戏', 'money': 200}
    """
    对象拥有实例属性和类属性重复的时候，优先使用自己的
    对象属性  >  类属性
    """
    Person.money = 200  # 通过类将类属性改掉
    # print(p1.money) #   这个时候再去使用对象访问类属性，就会发现有改变

    # 打印course返回值
    # print(p1.course())  # 张鑫

    # 删除类属性
    # del Person.money
    # print(Person.money) # 报错

    # 新增类属性
    Person.cla = "吃饭"
    # print(Person.cla) # 吃饭

    # print(p1.cla)  # 新增之后的类属性，对象也是可以访问的
    # print(Person.__dict__)  # 查看类属性





